﻿#define  _CRT_SECURE_NO_WARNINGS
#include <iostream>
using namespace std;

//基类/父类
//class Person
//{
//public:
//	void Print()
//	{
//		cout << "name:" << _name << endl;
//		cout << "age:" << _age << endl;
//	}
////protected:  //在子类可见（不能用），仅防外
//private:      //在子类是不可见的（不能用），防外防子
//	string _name = "peter"; // 姓名
//	int _age = 18;  //年龄
//};
//
//
//// 继承后父类的Person的成员（成员函数+成员变量）都会变成子类的一部分。这里体现出了
//class Student : public Person
//{
//public:
//	void func()
//	{
//		cout << _name << endl;
//		cout << "void func()" << endl;
//	}
//protected:
//	int _stuid; // 学号
//};
//
//
//class Teacher : public Person
//{
//protected:
//	int _jobid; // 工号
//};
//
//
//int main()
//{
//	/*Student s;
//	Teacher t;
//	s.Print();
//	t.Print();*/
//
//	double d = 1.2;
//	int i = d;
//	const int& ri = d;
//
//	Student s;
//	Person p = s;//不存在类型转换
//	Person& rp = s;//rp是子类中的父类部分的别名
//	Person* ptrp = &s;
//	return 0;
//}

//class Person
//{
//protected:
//	string _name = "小李子"; // 姓名
//	int _num = 111;         //身份证号
//}; 
//class Student : public Person
//{
//public:
//	void Print()
//	{
//		cout << Person::_num << endl;
//		cout << _num << endl;
//	}
//protected:
//	//子类和父类中有同名成员，
//	// 子类成员将屏蔽父类对同名成员的直接访问
//	int _num = 999; // 学号
//};
//
//class A
//{
//public:
//	void fun()
//	{
//		cout << "func()" << endl;
//	}
//};
//class B : public A
//{
//public:
//	void fun(int i)
//	{
//		//A::fun();
//		cout << "func(int i)->" << i << endl;
//	}
//};
//void Test()
//{
//	B b;
//	b.fun(10);
//	b.A::fun();
//};
//
//
//
//int main()
//{
//	/*Student s;
//	s.Print();*/
//	Test();
//	return 0;
//}


//class Person
//{
//public:
//	Person(const char* name = "peter")
//		: _name(name)
//	{
//		cout << "Person()" << endl;
//	}
//
//	Person(const Person& p)
//		: _name(p._name)
//	{
//		cout << "Person(const Person& p)" << endl;
//	}
//
//	Person& operator=(const Person& p)
//	{
//		cout << "Person operator=(const Person& p)" << endl;
//		if (this != &p)
//			_name = p._name;
//
//		return *this;
//	}
//
//	~Person()
//	{
//		cout << "~Person()" << endl;
//	}
//
//
//protected:
//	string _name; // 姓名
//};
//
//
//
//class Student : public Person
//{
//public:
//	Student(const char* name, int num)
//		: Person(name)
//		, _num(num)
//	{
//		cout << "Student()" << endl;
//	}
//
//	Student(const Student& s)
//		:Person(s)
//		,_num(s._num)
//	{
//		cout << "Student(const Student& s)" << endl;
//	}
//
//	Student& operator=(const Student& s)
//	{
//		if (this != &s)
//		{
//			Person::operator=(s);
//			_num = s._num;
//		}
//		cout << "Student& operator=(const Student& s)" << endl;
//
//		return *this;
//	}
//
//	//析构函数会被处理成destructor
//	~Student()
//	{
//		//Person::~Person();
//		cout << "~Student()" << endl;
//
//	}
//	//子类析构函数完成时，会自定义调用析构函数，保证先析构子再析构父
//protected:
//	int _num; //学号
//};
//
//
//int main()
//{
//	Student s1("张三", 18);
//	Student s2(s1);
//
//	Person p = s1;
//
//	s1 = s2;
//
//	return 0;
//}
